#ifndef JAMNIK_H_
#define JAMNIK_H_
#include <QGraphicsItem>
#include <QRectF>
#include <QQueue>
#include <QSet>

#include "JamnikPart.h"
#include "Food.h"

class Jamnik: public QObject, public QGraphicsItem {
Q_OBJECT
public:
	Jamnik();
	Jamnik(int id, QStringList body, bool isServerG = true); //dwie wspolrzedne, poczatek i koniec jamnika
	virtual ~Jamnik();
	QRectF boundingRect() const; //ewentualnie na pozniej
	void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
			QWidget *widget);
	enum Directions {
		DirUp, DirRight, DirLeft, DirDown
	};

	static QSet<QString> foodSet; //wspolrzedne na ktorych znajduje sie jedzenie
	static void foodSetInsert(Food* food)
	{
		foodSet << QString(i2str(food->getXY().x())) + QString(",") + QString(i2str(food->getXY().y()));
	}
	static char* i2str(int i)//konwertuje integer na string
	{
		char s[256];
		snprintf(s, sizeof(s), "%i", i);
		return strdup(s);
	}
	bool iAmHere(Food* food);
	void changeDirection(QString d);
public slots:
    void move();
    void onDirPressed(int key);
    bool crashedInto(Jamnik *jamnik);

signals:
	void boundCrash();
	void foodEaten(QPoint); //food zjedzony na wspolrzednych
	void directionChanged(QString);

private:
	QPixmap rotatePixmap(QPixmap pixmap, JamnikPart::Directions dir); //obraca pixmape zadana ilosc razy: 90*count

	int length; //dlugosc jamnika, nie rzeczywista tylko docelowa, zwieksza sie po zjedzeniu kotka
	JamnikPart *head; // glowa jamnika
	JamnikPart *tail; // ogon jamnika
	QList<JamnikPart*> body; // tulow jamnika w liscie

	int dir; // kierunek poruszania sie
	QQueue<int> keyPressQueue;
	void changeDirection();

	bool checkCollisions();
	bool checkFood();
	bool isAlive;
	QSet<QString> bodySet;//wszystkie wspolrzedne weza oprocz glowy, wykorzystywane przy
							//sprawdzaniu oklizji. Format: x,y

	QPoint pointFromXYStr(QString);
	QString getXYStrFormat(JamnikPart* jamnikPart);
	QString getXYStrFormat(Food* food);
	int keyToDir(int key, bool neg);
	int getRealLength(); //zwraca rzeczywista dlugosc jamnika.
	int id;
	bool isServerGame;
	bool wasDirSent;
	bool wasQuickDir;
	bool dirBU;

};

#endif /* JAMNIK_H_ */
